﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Bastanteo.Negocio;
using Bastanteo.Persistencia.ADO;
using Bastanteo.Domain;

namespace Bastanteo.Negocio
{
    public class PoderesBL
    {

        
        PoderDAO PoderDao = new PoderDAO();
        BastanteosDAO BastanteoDato = new BastanteosDAO();


        public Poder RegistrarPoder(string PoderId, string PoderDescripcion, int TipoServicio, string CodigoCorto, string TipoProducto)
        {
            Poder _poder = new Poder();

            if (PoderId == null || PoderDescripcion == null )
            {
                throw new DatosInsuficientesException("Algunos datos están vacíos");
            }


            if (PoderDao.Obtener(PoderId) != null)
            {
                throw new EntidadRepetidaException("Ya existe un Poder registrado con el mismo Id");
            }

            _poder.PoderId = PoderId;
            _poder.PoderDescripcion = PoderDescripcion;
            _poder.TipoServicio = TipoServicio;
            _poder.CodigoCorto = CodigoCorto;
            _poder.TipoProducto = TipoProducto;
           

            return  PoderDao.Crear(_poder);
        }



        public ICollection<Poder> ObtenerTodosPoderes()
        {

            ICollection<Poder> _poderes = null;

            _poderes = PoderDao.Listar();

            return _poderes;

        }




        public ICollection<Poder> ObtenerPorDescripcion(string PoderDescripcion)
        {

            ICollection<Poder> _poderes = null;

            if (PoderDescripcion == null)
            {
                throw new DatosInsuficientesException("Tiene que ingresar la descripcion del Poder para poder buscar");
            }

            foreach (Poder item in PoderDao.Listar())
            {
                if (item.PoderDescripcion.Contains(PoderDescripcion.Trim()))
                {
                    _poderes.Add(item);
                }
            }

            return _poderes;

        }

        public Poder ObtenerPoderPorCodigo(string PoderId)
        {


            if (PoderId == null)
            {
                throw new DatosInsuficientesException("Tiene que ingresar el Código del Poder para poder buscar");
            }

            return PoderDao.Obtener(PoderId);

        }


        public bool EliminarPoderPorId(string PoderId){

            bool eliminado = false; 

            if(PoderId==null){
                throw new DatosInsuficientesException("Tiene que ingresar el codigo del Poder");
            }

            //Verificar si el poder está siendo utlizando por por algún bastanteo. 
            bool ExistInBastanteo = false; 

            ICollection<Bastanteos> _bastanteos = BastanteoDato.Listar();

            if (_bastanteos!=null)
            {
                    foreach (Bastanteos item in _bastanteos)
                {
                    if (item.PoderesId == PoderId) {
                        ExistInBastanteo = true;
                    }
                }
            }

            

            if (ExistInBastanteo) {
                throw new Exception("El Poder no puede ser eliminado por que hay bastanteos que dependen de el"); 
            }

            Poder _poderEliminar = PoderDao.Obtener(PoderId);
            PoderDao.Eliminar(_poderEliminar);

            eliminado = true;

            return eliminado;

        }
    

    }
}